package com.lihan.model.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.lihan.config.StringListTypeHandler;
import com.lihan.enums.VisibleType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Column;
import java.util.ArrayList;
import java.util.List;


import javax.persistence.*;
import java.time.LocalDateTime;

/**
 * 朋友圈实体类 - 表示用户在社交平台发布的朋友圈信息
 *
 */
@Table(name = "friend_circle") // 映射数据库表名
@Data // Lombok注解，自动生成getter/setter
@NoArgsConstructor
@AllArgsConstructor
@Builder // Lombok注解，生成建造者模式
public class FriendCircle {

    /**
     * 朋友圈唯一标识ID - 主键
     */
    @TableId
    private String id;

    /**
     * 用户唯一标识
     */
    private String userId;

    /**
     * 用户昵称
     *
     */
    private String nickname;

    /**
     * 用户头像地址
     *
     */
    private String avatar;

    /**
     * 朋友圈正文内容
     *
     * @Column columnDefinition = "TEXT" 指定数据库字段类型：
     *  - 支持存储长文本（通常65535字符）
     *  - 区别于VARCHAR有长度限制
     */
    @Column(columnDefinition = "TEXT")
    private String content;

    /**
     * 朋友圈图片列表
     *
     */
    @TableField(value = "images", typeHandler = StringListTypeHandler.class)
    private List<String> images = new ArrayList<>();

    /**
     * 可见范围控制
     *
     * @TableField 配置：
     *  - value = "is_visible" 指定数据库字段名
     *  - insertStrategy = FieldStrategy.DEFAULT 允许自动填充默认值
     */
    @TableField(value = "is_visible", insertStrategy = FieldStrategy.DEFAULT)
    private VisibleType visibleType = VisibleType.defaultValue(); // 设置默认值

    /**
     * 创建时间
     *
     * 建议：
     * 1. 使用JSR310时间类型（LocalDateTime）
     * 2. 添加时间格式化注解
     * 3. 示例值："2023-08-20 14:30:00"
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    private LocalDateTime createTime;

}
